package com.lxg.learn.flink.概述;

import com.lxg.learn.flink.App;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * 默认情况下，元素不会在网络上一一传输（这会导致不必要的网络传输），而是被缓冲。缓冲区的大小（实际在机器之间传输）可以在 Flink 配置文件中设置。
 * 虽然此方法有利于优化吞吐量，但当输入流不够快时，它可能会导致延迟问题。要控制吞吐量和延迟，你可以调用执行环境（或单个算子）的
 * env.setBufferTimeout(timeoutMillis) 方法来设置缓冲区填满的最长等待时间。超过此时间后，即使缓冲区没有未满，也会被自动发送。超时时间的默认值为 100 毫秒。
 */
@SpringBootTest(classes = App.class)
public class StateAndCheckPoint {

    // TODO: 2025/3/25 State & Checkpointing 描述了如何启用和配置 Flink 的 checkpointing 机制。  后续添加 
    

    /**
     * 控制延迟
     *
     *
     * 为了最大限度地提高吞吐量，设置 setBufferTimeout(-1) 来删除超时，这样缓冲区仅在它们已满时才会被刷新。要最小化延迟，
     * 请将超时设置为接近 0 的值（例如 5 或 10 毫秒）。应避免超时为 0 的缓冲区，因为它会导致严重的性能下降。
     *
     */
    @Test
    public void test() throws Exception {
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setBufferTimeout(10L);
        DataStream<Long> someIntegers = env.generateSequence(-10, 10);
        someIntegers.print();
        env.execute();
    }

}
